package com.softeem.hbsm_video.controller;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.softeem.hbsm_video.entity.User;
import com.softeem.hbsm_video.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
@RequestMapping("/user")
//用户控制接口
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/add")
    public boolean add(User user) {
        //根据名称查询用户
        boolean b = userService.exists(Wrappers.query(User.class).eq("username", user.getUsername()));
        if (b) {
            //用户已存在
            return false;
        } else {
            //实现对密码的加密
            //生成随机盐（token)
            String salt = RandomUtil.randomString(16);
            //将输入密码和盐组合
            String pwd = user.getPassword() + salt;
            //使用md5算法对组合后的密码加密
            pwd = SecureUtil.md5(pwd);
            //将加密后的密码和随机盐设置到对象中
            user.setPassword(pwd);
            user.setSalt(salt);
            return userService.save(user);
        }
    }
    @GetMapping("/login")
    public boolean login(String username, String password) {
        User user = userService.getOne(Wrappers.query(User.class).eq("username", username));
        if (user == null) {
            // 用户不存在
            return false;
        }
        // 将输入的密码和随机盐组合在一起
        String pwd = password + user.getSalt();
        // 使用MD5算法对组合后的密码加密
        pwd = SecureUtil.md5(pwd);
        // 将加密后的密码与数据表中的密码比对
        return pwd.equals(user.getPassword());
    }
    //查询
    @GetMapping("/list")
    public List<User> list(){
        return userService.list();
    }
    //修改
    @GetMapping("/update")
    public boolean updateUser(String username,String password) {

        User user = userService.getOne(Wrappers.query(User.class).eq("username", username));

        if (user == null) {
            // 用户不存在
            return false;
        }
        if (user.getPassword() != null && !user.getPassword().isEmpty()) {
            // 生成一个新的随机盐
            String salt = RandomUtil.randomString(16);
            // 将输入密码和随机盐组合
            String pwd = user.getPassword() + salt;
            // 使用MD5算法对组合后的密码加密
            pwd = SecureUtil.md5(pwd);
            // 将加密后的密码和随机盐设置到对象中
            user.setPassword(pwd);
            user.setSalt(salt);
        }
        // 更新用户信息
        return userService.updateById(user);
    }
    //删除
    @GetMapping("/del/{id}")
    public boolean del(@PathVariable Integer id){
        return userService.removeById(id);
    }
}
